package com.suyin.ximoon.plugin.mybatis;

import java.util.List;

import com.suyin.ximoon.plugin.mybatis.WhereCondition.WhereRestrict;

/**
 * 表达式，用来拼接或者 Where中的条件
 * 
 * @author guo
 * 
 */
public class Restriction {

	Restriction() {
		
	}

	/**
	 * 等于判断
	 * 
	 * @param columnName
	 * @param columnValue
	 * @return
	 */
	public static WhereCondition eq(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.EQ, columnValue);
	}

	/**
	 * 大于
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值
	 * @return
	 */
	public static WhereCondition gt(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.GT, columnValue);
	}

	/**
	 * 大于等于
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值
	 * @return
	 */
	public static WhereCondition ge(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.GE, columnValue);
	}

	/**
	 * 不等于
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值
	 * @return
	 */

	public static WhereCondition ne(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.NE, columnValue);
	}

	/**
	 * 小于等于
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值
	 * @return
	 */
	public static WhereCondition le(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.LE, columnValue);
	}


	/**
	 * 小于
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值
	 * @return
	 */
	public static WhereCondition lt(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.LT, columnValue);
	}
	
	/**
	 * like 模糊，
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值，这里要包含%
	 * @return
	 */
	public static WhereCondition like(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.LIKE, columnValue);
	}

	/**
	 * between之间
	 * 
	 * @param columnName
	 *            字段
	 * @param low
	 *            小值
	 * @param hig
	 *            大值
	 * @return
	 */
	public static WhereCondition between(String columnName, Object low, Object hig) {
		return new WhereCondition(columnName, low, hig);
	}

	/**
	 * in 的sql拼接
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值，这里是数组
	 * @return
	 */
	public static WhereCondition in(String columnName, Object[] columnValue) {
		return new WhereCondition(columnName, WhereRestrict.IN, columnValue);
	}

	/**
	 * notin 的sql拼接
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值，这里是数组
	 * @return
	 */
	public static WhereCondition notin(String columnName, Object[] columnValue) {
		return new WhereCondition(columnName, WhereRestrict.NOTIN, columnValue);
	}

	/**
	 * in 的sql拼接
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值，这里是Collection
	 * @return
	 */
	public static WhereCondition in(String columnName, List<?> columnValue) {
		return new WhereCondition(columnName, WhereRestrict.IN, columnValue);
	}

	/**
	 * NOTIN 的sql拼接
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值，这里是Collection
	 * @return
	 */
	public static WhereCondition notin(String columnName, List<?> columnValue) {
		return new WhereCondition(columnName, WhereRestrict.NOTIN, columnValue);
	}

	/**
	 * is 的拼接， 通常是 null的判断
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值，比如null
	 * @return
	 */
	public static WhereCondition is(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.IS, columnValue);
	}

	/**
	 * is not 的拼接， 通常是 null的判断
	 * 
	 * @param columnName
	 *            字段
	 * @param columnValue
	 *            字段值，比如null
	 * @return
	 */
	public static WhereCondition isnot(String columnName, Object columnValue) {
		return new WhereCondition(columnName, WhereRestrict.ISNOT, columnValue);
	}



	

}
